
#include"data.h"
#include "datacenter.h"

#include<QStandardPaths>
#include<QJsonObject>

#include<QJsonDocument>
#include<QDir>
namespace model{
DataCenter* DataCenter::instance = nullptr;
DataCenter *DataCenter::getInstance()
{
    if(instance==nullptr)
    {
        instance=new DataCenter();
    }
    return instance;
}

DataCenter::~DataCenter()
{
   delete friendsList;
    // 会话列表
   delete chatSsionList;
    // 记录每个会话中, 都有哪些成员，主要是群聊会话,key 为 chatSessionId, value 为成员列表
   delete menberList;
    // 待处理的好友申请列表
   delete applyList;
    // 每个会话的最近消息列表, key 为 chatSessionId, value 为消息列表
   delete recentMessages;
    // 存储每个会话, 未读消息的个数. key 为 chatSessionId, value 为未读消息的个数.
   delete unreadMessageCount ;
    // 用户的好友搜索结果.
 delete searchUserResult;
    // 历史消息搜索结果.
  delete searchMessageResult;
}
//初始化数据文件
void DataCenter::initDataFile()
{
    //1.创建文件路径,basepath去获取标准路径
    QString basepath=QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
    QString filepath;
    filepath=basepath+"chatClient.json";
    //判断是否有这个路径，如果没有，创建
    QDir dir;
    if(!dir.exists(filepath))
    {
        dir.mkpath(filepath);
    }
    //构建好文件路径之后，就把文件创建出来
    QFile file(filepath);
    //初始化文件
    if(!file.open(QIODevice::WriteOnly|QIODevice::Text))
    {
       LOG<<"打开文件失败";
        return;
    }
    QString data="{\n\n}";
    file.write(data.toUtf8());
    file.close();
}

void DataCenter::saveDataFile()
{
    //文件路径
    QString filepath=QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)+"chatClient.json";
    //打开文件
    QFile file(filepath);
    if(!file.open(QIODevice::WriteOnly|QIODevice::Text))
    {
        LOG<<"打开文件失败";
        return;
    }
    //按json的格式写入文件
    QJsonObject jsonObj;
    jsonObj["loginSessionId"] = loginSessionId;

    QJsonObject jsonUnread;
    for (auto it = unreadMessageCount->begin(); it != unreadMessageCount->end(); ++it) {
        // 注意 Qt 的迭代器使用细节和 STL 略有差别. 此处不是使用 first / second 的方式
        //相当于赋值吧
        jsonUnread[it.key()] = it.value();
    }
    jsonObj["unread"]=jsonUnread;
    //吧json写入文件
    QJsonDocument jsonDoc(jsonObj);
    QString s = jsonDoc.toJson();

    file.write(s.toUtf8());
    // 关闭文件
    file.close();
}

void DataCenter::loadDataFile()
{

}

DataCenter::DataCenter()
{
    //主要是哈希的要写
    menberList=new QHash<QString,QList<UserInfo>>();
    recentMessages=new QHash<QString,QList<Message>>();
    unreadMessageCount=new QHash<QString,int>();
}


}
//end namespace
